package com.commons.annotation;


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD) //作用在属性上
@Retention(RetentionPolicy.RUNTIME) //注解不仅被保存到class文件中，jvm加载class文件之后，仍然存在
public @interface Query {

    enum Type{
        //相等
        EQUAL,
        //大于等于
        GEATER_THAN,
        //小于等于
        LESS_THAN,
        //中模糊查询
        INNER_LIKE,
        //左模糊查询
        LEFT_LIKE,
        //右模糊查询
        RIGHT_LIKE,
        //小于
        LESS_THAN_NQ,
        //包含
        IN,
        //不包含
        NOT_IN,
        //不等于
        NOT_EQUAL,
        //between
        BETWEEN,
        //不为空
        NOT_NULL,
        //为空
        IS_NULL,
        //对应sql select * from table where find_in_set('querytag',table.tags)
        FIND_IN_SET,

    }

    //简单连接查询
    enum Join{
        LEFT,RIGHT,INNER
    }


    /*
    基本对象的属性名
     */
    String PropName() default "";

    //查询方式
    Type type() default Type.EQUAL;

    //连接查询的属性名，如User类中的dept
    String joinName() default "";

    //默认左连接
    Join join() default Join.LEFT;

    //多字段模糊查询，仅支持String，多个用都好隔开,如@Query(blurry="email,username")
    String blurry() default "";
}
